﻿/*====================================================================================
* Copyright (c) 2015-2026成都长益西联软件有限公司,All Rights Reserved.
*=====================================================================================
* 文件名称：TimestampTool
* 功能描述：TimestampTool 
* 创 建 者：HFL
* 创建时间：2016-9-29 15:14:30
* 修 改 者：HFL
* 修改时间：2016-9-29 15:14:30
*===================================================================================*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace WPay.Infrastructure.Unity
{
    /// <summary>
    /// 时间戳工具类
    /// 提供功能【1：获取指定时间，时间戳Timestamp
    /// 2：获取当前时间，时间戳Timestamp
    /// 3：时间戳转为C#格式时间】
    /// </summary>
    public class TimestampTool
    {
        /// <summary>
        /// 获取指定时间，时间戳Timestamp
        /// [基于1970年开始]
        /// </summary>
        /// <param name=”_dTime”>需要获取时间戳的时间</param>
        /// <param name=”_ms”>是否精确到毫秒，默认：false</param>
        /// <returns></returns>
        public static long GetTimeSpan(DateTime _dTime, bool _ms = false)
        {
            if (_dTime == default(DateTime))
                _dTime = new DateTime(1970, 1, 1, 8, 0, 0);
            DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0);
            return _ms ? Convert.ToInt64((_dTime - DateStart).TotalMilliseconds) : Convert.ToInt64((_dTime - DateStart).TotalSeconds);
        }

        /// <summary>
        /// 获取当前时间，时间戳Timestamp
        /// [基于1970年开始]
        /// </summary>
        /// <param name=”_ms”>是否精确到毫秒，默认：false</param>
        /// <returns></returns>
        public static long GetTimeSpan(bool _ms = false)
        {
            DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0);
            //return Convert.ToInt32((DateTime.Now - DateStart).TotalSeconds);
            return _ms ? Convert.ToInt64((DateTime.Now - DateStart).TotalMilliseconds) : Convert.ToInt64((DateTime.Now - DateStart).TotalSeconds);

        }

        /// <summary>
        /// 时间戳转为C#格式时间
        /// [基于1970年开始]
        /// </summary>
        /// <param name=”_timeStamp”>时间戳</param>
        /// <param name=”_ms”>是否精确到毫秒，默认：false</param>
        /// <returns></returns>
        public static DateTime GetTime(string _timeStamp, bool _ms = false)
        {
            var timeStamp = Convert.ToInt64(_timeStamp);
            return GetTime(timeStamp, _ms);
        }
        /// <summary>
        /// 时间戳转为C#格式时间
        /// [基于1970年开始]
        /// </summary>
        /// <param name=”_timeStamp”>时间戳</param>
        /// <param name=”_ms”>是否精确到毫秒，默认：false</param>
        /// <returns></returns>
        public static DateTime GetTime(Double _timeStamp, bool _ms = false)
        {
            var timeStamp = Convert.ToInt64(_timeStamp);
            return GetTime(timeStamp, _ms);
        }
        /// <summary>
        /// 时间戳转为C#格式时间
        /// [基于1970年开始]
        /// </summary>
        /// <param name=”_timeStamp”>时间戳</param>
        /// <param name=”_ms”>是否精确到毫秒，默认：false</param>
        /// <returns></returns>
        public static DateTime GetTime(long _timeStamp, bool _ms = false)
        {
            DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0);
            double timestamp = Convert.ToDouble(_timeStamp);
            return _ms ? DateStart.AddMilliseconds(timestamp) : DateStart.AddSeconds(timestamp);
        }
    }
}